❌ Распространённые ошибки начинающих разработчиков на Python
Вы с высокой вероятностью узнаете себя хотя бы в одной из них.
Мы оформили несколько наиболее частых ошибок в виде карточек — наглядно, кратко и с примерами.
👀 Листайте — и избегайте типичных ловушек.
👉 Остальные ошибки и подробные разборы — по ссылке в полной статье: https://proglib.io/sh/Zb85rT2DNS
Библиотека питониста #буст
Вы с высокой вероятностью узнаете себя хотя бы в одной из них.
Мы оформили несколько наиболее частых ошибок в виде карточек — наглядно, кратко и с примерами.
Библиотека питониста #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
📌 Промт дня: рефакторинг Python-кода с применением SOLID-принципов
Когда код начинает обрастать логикой, классами и связями, особенно важно не просто «чтобы работало», а чтобы код был поддерживаемым, расширяемым и понятным.
Принципы SOLID помогают построить архитектуру, устойчивую к изменениям, и избавляют от «спагетти-кода» в долгосрочной перспективе.
Промт:
📎 Подходит для: middle/senior разработчиков, изучающих архитектуру и рефакторинг.
Библиотека питониста #буст
Когда код начинает обрастать логикой, классами и связями, особенно важно не просто «чтобы работало», а чтобы код был поддерживаемым, расширяемым и понятным.
Принципы SOLID помогают построить архитектуру, устойчивую к изменениям, и избавляют от «спагетти-кода» в долгосрочной перспективе.
Промт:
Проанализируй и отрефактори мой Python-код, применяя принципы SOLID. Убедись, что:
• Каждый класс и функция следуют принципу единственной ответственности (SRP);
• Код открыт для расширения, но закрыт для модификации (OCP);
• Подклассы могут заменить родительские классы без ошибок (LSP);
• Интерфейсы не перегружены и разбиты на специализированные (ISP);
• Зависимости внедряются через конструкторы или интерфейсы (DIP).
Также предложи:
• Как можно улучшить модульность и тестируемость;
• Какие абстракции можно ввести или упростить;
• Какие участки стоит покрыть юнит-тестами.
Используй лучшие практики Python, включая:
• abc или Protocol для абстракций,
• dataclasses для структур,
• typing для явной типизации,
• pytest и unittest.mock для тестов.
📎 Подходит для: middle/senior разработчиков, изучающих архитектуру и рефакторинг.
Библиотека питониста #буст
😱 Вся правда об увольнениях в IT в 2025-м
Пока все молчат о том, что происходит на рынке, мы решили выяснить реальную картину. Без прикрас и корпоративного пиара.
Но для этого нам нужна ваша помощь! Мы собираем данные от разработчиков, тестировщиков, менеджеров и всех, кто работает в ИТ, чтобы создать честное исследование о:
— реальных причинах массовых увольнений
— судьбе тех, кто остался за бортом IT-рынка
— том, сколько времени сейчас нужно на поиск работы
Почему это важно? Потому что сила в правде. Зная реальную ситуацию, вы сможете лучше понимать тренды рынка и планировать карьеру.
⚡️Пройдите опрос и помогите всему сообществу: https://clc.to/yJ5krg
Пока все молчат о том, что происходит на рынке, мы решили выяснить реальную картину. Без прикрас и корпоративного пиара.
Но для этого нам нужна ваша помощь! Мы собираем данные от разработчиков, тестировщиков, менеджеров и всех, кто работает в ИТ, чтобы создать честное исследование о:
— реальных причинах массовых увольнений
— судьбе тех, кто остался за бортом IT-рынка
— том, сколько времени сейчас нужно на поиск работы
Почему это важно? Потому что сила в правде. Зная реальную ситуацию, вы сможете лучше понимать тренды рынка и планировать карьеру.
⚡️Пройдите опрос и помогите всему сообществу: https://clc.to/yJ5krg
До Python 3.7, если вы хотели создать объект
Coordinate(x=1, y=2)
, приходилось писать:class Coordinate:
def __init__(self, x: int, y: int):
self.x = x
self.y = y
Это выглядело нормально. Но:
__init__
запускает код при каждом создании объекта, что усложняет работу, особенно если нужны побочные действия (например, открытие файла).Пример проблемного кода:
class FileReader:
def __init__(self, path: str):
self._fd = fileio.open(path)
Вроде удобно. Но:
fd
напрямую — нужно городить object.__new__
.fileio.open
.open
становится async
, вам уже не обойтись __init__
.Ключевая ошибка: связывать создание объекта с побочными эффектами (например, I/O) — это антипаттерн.
@dataclass
для объявления:@dataclass
class FileReader:
_fd: int # или лучше: FileDescriptor
@classmethod
:from typing import Self
@dataclass
class FileReader:
_fd: int
@classmethod
def open(cls, path: str) -> Self:
return cls(fileio.open(path))
Теперь создавайте объект так:
FileReader.open("file.txt")
, а не через __init__
.Это решение поддерживает:
from_fd
, from_buffer
, from_resource
, ...)NewType
:from typing import NewType
FileDescriptor = NewType("FileDescriptor", int)
Используйте в классе:
@dataclass
class FileReader:
_fd: FileDescriptor
@classmethod
def open(cls, path: str) -> Self:
return cls(fileio.open(path)) # пусть возвращает FileDescriptor
1. Используйте
@dataclass
.2. Не пишите
__init__
вручную.3. Добавляйте
@classmethod
-фабрики (.open()
, .from_config()
, .from_env()
).4. Используйте
NewType
.Библиотека питониста #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👾 AI-агенты — настоящее, о котором все говорят
На днях мы анонсировали наш новый курс AI-агенты для DS-специалистов 🎉
Это продвинутая программа для тех, кто хочет получить прикладной опыт с LLM и решать сложные задачи!
На обучении вы соберете полноценные LLM-системы с учётом особенностей доменных областей, получите hands-on навыки RAG, Crew-AI / Autogen / LangGraph и агентов.
🎓 В рамках курса вы научитесь:
— адаптировать LLM под разные предметные области и данные
— собирать свою RAG-систему: от ретривера и реранкера до генератора и оценки качества
— строить AI-агентов с нуля — на основе сценариев, функций и взаимодействия с внешней средой
Разберете реальные кейсы и научитесь применять похожие подходы в разных доменных областях, получите фундамент для уверенного прохождения NLP system design интервью и перехода на следующий грейд.
Старт 5 июля, а при оплате до 1 июня действует дополнительная скидка и бонус — эксклюзивный лонгрид по API и ML от Proglib.
Начните осваивать тему уже сейчас 👉 https://clc.to/Cttu7A
На днях мы анонсировали наш новый курс AI-агенты для DS-специалистов 🎉
Это продвинутая программа для тех, кто хочет получить прикладной опыт с LLM и решать сложные задачи!
На обучении вы соберете полноценные LLM-системы с учётом особенностей доменных областей, получите hands-on навыки RAG, Crew-AI / Autogen / LangGraph и агентов.
🎓 В рамках курса вы научитесь:
— адаптировать LLM под разные предметные области и данные
— собирать свою RAG-систему: от ретривера и реранкера до генератора и оценки качества
— строить AI-агентов с нуля — на основе сценариев, функций и взаимодействия с внешней средой
Разберете реальные кейсы и научитесь применять похожие подходы в разных доменных областях, получите фундамент для уверенного прохождения NLP system design интервью и перехода на следующий грейд.
Старт 5 июля, а при оплате до 1 июня действует дополнительная скидка и бонус — эксклюзивный лонгрид по API и ML от Proglib.
Начните осваивать тему уже сейчас 👉 https://clc.to/Cttu7A
proglib.academy
Курс|AI-агенты для DS-специалистов
На курсе ты разберёшься, как работают AI-агенты и как их применять в работе — от текстовых помощников до систем, помогающих принимать решения. Разберем архитектуру агентов, связку с внешними API, пайплайны действий и популярные библиотеки. Курс включает реальные…
Библиотека питониста | Python, Django, Flask pinned «👾 AI-агенты — настоящее, о котором все говорят На днях мы анонсировали наш новый курс AI-агенты для DS-специалистов 🎉 Это продвинутая программа для тех, кто хочет получить прикладной опыт с LLM и решать сложные задачи! На обучении вы соберете полноценные…»
💭 Холивар: f-строки vs .format() vs %
Python предлагает сразу три способа форматирования строк — и у каждого есть свои фанаты.
Разбираемся по фактам:
🔎 f-строки (Python 3.6+):
✅ читаемо, лаконично
✅ быстрее при выполнении
🙅♂️ не работает в Python < 3.6
🙅♂️ неудобно при кавычках внутри строк
🔎 .format():
✅ кросс-версионно (Python 2.7+ и 3.x)
✅ хорош для шаблонов и повторов
🙅♂️ длиннее, особенно с ключами
🙅♂️ легко запутаться с порядком аргументов
🔎 Cтарый стиль %:
✅ кратко для простых случаев
✅ работает даже в старом Python
🙅♂️ типобезопасность на минималках
🙅♂️ легко сломать, особенно при refactoring’е
Выбор зависит от контекста:
🔘 f-строки — выбор для современного Python-кода
🔘
🔘
А вы что используете чаще всего?
❤️ f-строки — будущее уже здесь
👍
P.S. Инструкция, как оставить коммент
Библиотека питониста #междусобойчик
Python предлагает сразу три способа форматирования строк — и у каждого есть свои фанаты.
Разбираемся по фактам:
name = "Alice"
age = 30
print(f"{name} is {age} years old.")
name = "Alice"
age = 30
print("{} is {} years old.".format(name, age))
name = "Alice"
age = 30
print("%s is %d years old." % (name, age))
Выбор зависит от контекста:
.format()
— для совместимости и шаблонов%
— для ностальгирующих и логовА вы что используете чаще всего?
❤️ f-строки — будущее уже здесь
👍
.format()
/ %
— стабильность и привычкаP.S. Инструкция, как оставить коммент
Библиотека питониста #междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
♻️ Garbage Collector в Python — как он реально работает
Python сам управляет памятью, но делает это не одним, а двумя способами одновременно:
1⃣ Подсчёт ссылок (Reference Counting)
Каждый объект в Python хранит число ссылок на себя:
📝 Когда ссылок становится 0 — объект немедленно удаляется, и память освобождается.
✅ Быстро и просто.
❗️ Проблема: не справляется с циклическими ссылками:
2⃣ Поколенческий сборщик мусора (Generational GC)
Чтобы находить такие циклы, Python использует модуль
📝 Поколение 0 — новые объекты
📝 Поколение 1 — выжили после первой сборки
📝 Поколение 2 — считаются «старожилами»
Чем старше объект, тем реже его проверяют, чтобы не тратить ресурсы:
✅ Почему это важно:
📝 GC работает фоном и почти незаметно, но может вызвать лаги, если не оптимизировать.
📝 Вы можете влиять на GC: отключать, настраивать пороги, анализировать поведение.
📝 В больших проектах с долгоживущими объектами важно знать, в каком поколении что живёт.
Библиотека питониста #буст
Python сам управляет памятью, но делает это не одним, а двумя способами одновременно:
Каждый объект в Python хранит число ссылок на себя:
import sys
a = []
print(sys.getrefcount(a)) # покажет количество ссылок на объект
❗️ Проблема: не справляется с циклическими ссылками:
a = []
a.append(a) # теперь объект содержит ссылку на себя
Чтобы находить такие циклы, Python использует модуль
gc
. Все объекты отслеживаются по «возрасту»:Чем старше объект, тем реже его проверяют, чтобы не тратить ресурсы:
import gc
gc.collect() # вручную запустить сборку мусора
gc.get_count() # сколько объектов в каждом поколении
gc.get_threshold() # когда запускать сборку
Библиотека питониста #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡️ Дождались! Ребята сделали крутейший канал про Python
Здесь на простых картинках и понятном языке обучают этому языку, делятся полезными фишками и инструментами
Подписывайтесь: @PythonPortal
Здесь на простых картинках и понятном языке обучают этому языку, делятся полезными фишками и инструментами
Подписывайтесь: @PythonPortal
Если вы работаете с машинным обучением в реальных продуктах, то знаете:
🔹 обучить модель — это только начало
🔹 внедрить её в стабильный продакшен — совсем другая задача
В статье разбираем:
📖 Читайте статью:
«Бэкенд под ML-проекты: особенности архитектуры и типичные узкие места»
→ https://proglib.io/sh/xCfXt2pH4j
Библиотека питониста #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
⏰ Последние 2 дня скидки на курс «AI-агенты для DS-специалистов»
Пока большинство дата-сайентистов строят модели и делают аналитику, рынок уже требует специалистов, которые создают автономные системы на базе ИИ-агентов.
Для этого мы подготовили специальный курс и собрали кучу дополнительного контента, который поможет погрузиться в тему еще глубже. Но чтобы получить все плюшки, успевайте до 1 июня.
🎁 Что вы получите при оплате курса до 1 июня:
— Промокод PROGLIBAIна 10 000 ₽ на курс, чтобы изучать AI-агентов еще выгоднее
— Эксклюзивный лонгрид по API и ML от Proglib
💡Что разберем на курсе «AI-агенты для DS-специалистов»:
— Реализацию памяти в цепочках langchain
— Полный пайплайн RAG-системы с оценкой качества
— Основы мультиагентных систем (MAS)
— Протокол MCP и фреймворк FastMCP
Промокод также действует на курсы «Математика для Data Science» и «Алгоритмы и структуры данных».
👉 Успейте до 1 июня: https://clc.to/Cttu7A
Пока большинство дата-сайентистов строят модели и делают аналитику, рынок уже требует специалистов, которые создают автономные системы на базе ИИ-агентов.
Для этого мы подготовили специальный курс и собрали кучу дополнительного контента, который поможет погрузиться в тему еще глубже. Но чтобы получить все плюшки, успевайте до 1 июня.
🎁 Что вы получите при оплате курса до 1 июня:
— Промокод PROGLIBAIна 10 000 ₽ на курс, чтобы изучать AI-агентов еще выгоднее
— Эксклюзивный лонгрид по API и ML от Proglib
💡Что разберем на курсе «AI-агенты для DS-специалистов»:
— Реализацию памяти в цепочках langchain
— Полный пайплайн RAG-системы с оценкой качества
— Основы мультиагентных систем (MAS)
— Протокол MCP и фреймворк FastMCP
Промокод также действует на курсы «Математика для Data Science» и «Алгоритмы и структуры данных».
👉 Успейте до 1 июня: https://clc.to/Cttu7A